
//
//  func.swift
//  常亮变量
//
//  Created by MyMac on 15/10/10.
//  Copyright (c) 2015年 tongfang. All rights reserved.
//

import Foundation
/**
函数是以 func开头的 （）里面是参数 ->是返回值

*/
func textFunc1(_ v1:String,v2:String)->String{

    return  "\(v1) and \(v2)"
  
}

func text2()->String{

let ret=textFunc1("ios", "andord")
    
return "测试函数结果\(ret)"

}
//andValue表示标签，一个参数的描述
//swift的方法描写不像oc 可以将参数分开写，可以类似一个句子，她的描述格式是 方法名（参数1(参数描述 参数名):类型，参数2:类型...）
//这种定义是错误的 func text(v1:String) block(v2:String) deleget(v3:String)
func text3 (_ v1:String,andValue v2:String,andNumber v3:Int)->String
{

  return "v1:\(v1) v2:\(v2)  v3:\(v3)"


}
//swift中的返回值可以返回多个返回值，返回值用一个元组包含
func text4 ()->(String,String,ret3:String){


  return ("luojie","niuhui","caiwen")

}
//方法嵌套，在一个方法中嵌套另一个方法，类似于一个局部的block
//其实swift的方法也是类似于c方法，包含方法的声明和方法的调用
func text5()->Int{
  var y=10
    
    func addY(){//方法声明
      
        y+=19;
    
    }
   addY()//方法调用
    return y



}
//返回一个函数指针
//返回的函数类型是 （参数->返回值）用这种方式表示返回的函数
func text6 ()-> (()->String){
    func addX(_ num:Int,str:String) ->Int{
    println("\(num)  and  \(str)")
    return num+1
    }
    
    return text2//可以调用外部函数，所以也能返回外部函数
    
   //return addX//把addX这个函数返回出去了，注意这里不是调用，因为没有加（），调用是addX()


}

//函数当作参数
//注意，参数如果写了参数名，调用时也要写参数名
func text7 (_ text:((_ name:String,_ age:String)->String)){
     let s = text(name: "ios",age: "andord")//注意格式，有时候要空格
      println("参数函数\(text) and \(s)")

}
func text8(){
  //textFunc1表示textFunc1函数加了（）就是调用
  text7(textFunc1)
    text7 { (name, age) -> String in
        println("你好")
        return "你好"
    }

}



func closureMethonTransmit ( _ clos : (_ n:Int ,_ arr:NSArray) ->Bool,s:String){
    //println("n:\(n) arr:\(arr) s:\(s) clos:\(clos)")
    println(s)
    var d = clos(n: 10,arr: [10,88,991,6,9,8])
    
    
    
}
//方法传递时，参数如果写了名字，调用时也得附上名字
func closureAndMethonDifferent (_ methon:(String ,_ age:Int) ->String ,closure:(String ,_ cAge:Int) ->String){
  print(methon)
 let methonRet =   methon("罗杰",age: 24)
    print(methonRet)
  print(closure)
  let closureRet =  closure("才文",cAge: 22)
    print(closureRet)

}




